home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASCIISRC.ZIP / PARTY.C < prev    next >
C/C++ Source or Header  |  1995-10-14  |  15KB  |  689 lines

  1. //             This is our contribution to Scenario party at Lahti!
  2. //                                             Windows 95 sucks!
  3. //             This simple 'demo' is coded by Dr.Doom/Paranoids 1995
  4. //                                          Joo, kyllä se siitä!
  5.  
  6. //   1. Avaus fade out & in logon kanssa ja varit mukaan
  7. //   2. Logon poisto rivi kerrallaan. (random??)
  8. //   3. Rotate & zoomer I
  9. //   4. Rotate & zoomer II
  10. //   5. Donitsi
  11. //   6. Tunneli
  12. //   5. The end screen
  13.  
  14. #include <stdio.h>
  15. #include <conio.h>
  16. #include <dos.h>
  17. #include <string.h>
  18. #include <alloc.h>
  19. #include <assert.h>
  20.  
  21. #include <midas.h>
  22.  
  23. #include "ascidemo.h"
  24. #include "lpage.h"
  25. extern void rotating_torus(int frame);
  26.  
  27.  
  28. #define I asm
  29. #define read_char(x,y) (*(unsigned char far *) MK_FP(0xB800,160*(y)+2*(x)))
  30. #define read_color(x,y) (*(unsigned char far *) MK_FP(0xB800,160*(y)+2*(x)+1))
  31. #define put_char(x,y,character) \
  32.     ((*(unsigned char far *) MK_FP(0xb800,160*(y)+2*(x)))=(character))
  33. #define put_color(x,y,color) \
  34.     ((*(unsigned char far *) MK_FP(0xb800,160*(y)+2*(x)+1))=(color))
  35.  
  36. extern unsigned _stklen = 4096;
  37.  
  38. extern unsigned char far colors[65280U];
  39. extern unsigned char far chars[65280U];
  40. unsigned int mem2;//=FP_SEG(colors);
  41. unsigned int mem1;//=FP_SEG(chars);
  42.  
  43.  
  44.  
  45. volatile unsigned long frameCount = 0;
  46.  
  47.  
  48. void main (void);
  49. void logo_color (void);
  50. void logo_bw (void);
  51. void shade (void);
  52.  
  53. // unsigned char *koko_rivi[80];
  54.  
  55. void waittof(void)
  56. {
  57. //    unsigned long oldFrameCount = frameCount;
  58. //    while ( frameCount == oldFrameCount ) ;
  59.  
  60.     while (!(inportb(0x3da)&0x8));
  61.     while (inportb(0x3da)&8);
  62.  
  63. }
  64.  
  65.  
  66. void poispois (void)
  67. {
  68.     int cur_rivi=0,cur_sarake;//,mrk_left=0;
  69. //    unsigned char *merkki[2];
  70.  //    unsigned char merkki[2];
  71.     int frame=0;
  72.     for (frame=0;frame<100;frame++)
  73.     {
  74.         for (cur_rivi=0;cur_rivi<50;cur_rivi++)
  75.         {
  76.             for (cur_sarake=1;cur_sarake<=79;cur_sarake++)
  77.             {
  78.                 put_color(cur_sarake-1,cur_rivi,read_color(cur_sarake,cur_rivi));
  79.                 put_char(cur_sarake-1,cur_rivi,read_char(cur_sarake,cur_rivi));
  80.             }
  81.             put_char(79,cur_rivi,' ');
  82.             put_color(79,cur_rivi,0x00);
  83.             cur_rivi++;
  84.             for (cur_sarake=79;cur_sarake>=0;cur_sarake--)
  85.             {
  86.                 put_color(cur_sarake+1,cur_rivi,read_color(cur_sarake,cur_rivi));
  87.                 put_char(cur_sarake+1,cur_rivi,read_char(cur_sarake,cur_rivi));
  88.             }
  89.             put_char(0,cur_rivi,' ');
  90.             put_color(0,cur_rivi,0x00);
  91.  
  92.         }
  93.         waittof();
  94.     }
  95. }
  96.  
  97. void shade(int start,int end,int add)
  98.     {
  99.         int c;
  100.         gotoxy(1,1);
  101.         for (;start!=end;start+=add)
  102.             {
  103.             _CX=765; //765
  104.             _DX=0x03c8;
  105.             _AX=1;  // 0
  106.             I out dx,al
  107.             _DX++;
  108.             _AX=start;
  109.             uusi:
  110.             I out dx,al
  111.             I loop uusi
  112.  
  113.             for (c=0;c<=1;c++)
  114.                 {
  115.                 while (0==(inportb(0x3da)&8));
  116.                     while ((inportb(0x3da))&8);
  117.                 }
  118.             }
  119.     }
  120.  
  121. void backscr (void)
  122. {
  123.     _AX=0x3;
  124.     geninterrupt(0x10);
  125. }
  126.  
  127. void logo_bw(void)
  128. {
  129. }
  130.  
  131.  
  132. void logo_color(void)
  133. {
  134.     _fmemcpy(MK_FP(0xb800,0),(void far *)DEMO_PRELUDE,DEMO_PRELUDE_LENGTH);
  135. }
  136.  
  137. void lastpage(void)
  138. {
  139.     _fmemcpy(MK_FP(0xb800,0),(void far *)LAST_PAGE,LAST_PAGE_LENGTH);
  140. }
  141.  
  142.  
  143.  
  144. int sin[1025];
  145. char sin8[1025];
  146. #define cosadd (256)
  147. void optimized_sin()
  148. {
  149.     long v,x,vc=0,xc=0,AA=340913941L;//357913941;//193948423;
  150.  
  151.     register int i;
  152.     x=-32768L;v=0;
  153.     for (i=0;i<=512;i++) {
  154. //        (*(char far *)MK_FP(0xa000,x/512+160+320*(i/4)))   ++;
  155. //        (*(char far *)MK_FP(0xa000,x/512+160+320*((SINTABLESIZE-i)/4)))++;
  156. //        (*(char far *)MK_FP(0xa000,x/512+160+320*((SINTABLESIZE+i)/4)))++;
  157.         sin[(i*2-cosadd)&1023]=sin[(i*2+1-cosadd)&1023]=(int)(x/2);
  158.         sin8[i*2]=sin8[i*2+1]=(x/512)+64;
  159.         //sin8a[i*2]=sin8a[i*2+1]=(x/1024);
  160.  
  161.         _ECX=xc;
  162.         _EAX=x;
  163.         I cdq
  164.         I shld EAX,EDX,16       // THIS CODE SUCKS!! optimized sin routine? :)
  165.         I shr ecx,16            // hahah hahha :)
  166.         I or eax,ecx
  167.         I idiv dword ptr AA
  168.  
  169.         I sub vc,edx
  170.         I sbb v,eax
  171.         _EAX=vc;
  172.         _EDX=v;
  173.         I add xc,eax
  174.         I adc x,edx
  175.     }
  176. }
  177.  
  178.  
  179. void rotzoom(int frame,int plane)
  180. {
  181.     int iszbuffer=0,scale;
  182.     int x1=0,y1=0,x2=0,y2=0,x3=0,
  183.             y3=0,x4=0,y4=0,mdx1=0,mdy1=0,mdx2=0,mdy2=0,y=0,vx=0,
  184.             vy=0,qdx=0,qdy=0,mx1=0,my1=0,mx2=0,my2=0;
  185.             int scry=50;
  186.             int scrx=80;
  187.             int scrxadd=2;
  188.             int scrxo=160;
  189.             int addx,addy;
  190.             static int rotownframe=0,ownangle=0,ownangle1=0,ownangle2=0, speed=2;
  191.             static int addx1=0,addy1=0,addx2=0,addy2=0;
  192.         static int rotplane1,rotplane2;
  193.     unsigned char _seg *dbuffer=(unsigned char _seg *)0xb800;
  194.     //int mem1=0x0;
  195.     //int mem2=0x0; /* segments */
  196.  
  197.     rotplane1++;
  198.     rotplane2-=2;
  199.  
  200.         // PICTURE MUST HAVE WIDTH OF 256!!!!!
  201.  
  202. //        bigscale=3;
  203.  
  204.          //(ownframe<<2);
  205.  
  206.         if (iszbuffer) {
  207.         } else {
  208.         //xaddspeed++;
  209.  
  210.         if (plane) rotownframe=rotplane1; else rotownframe=rotplane2;
  211.         if ((frame&0x1)==0) speed++;
  212.         scale=(sin[(rotownframe<<2)&1023]/120)+160; //148;//+256+128+32;
  213.         _DI=(int)(scrxo*scry-1-plane);
  214.         }
  215.  
  216.         if (plane)
  217.             { addx1+=1; addx=addx1; addy=addy1; }
  218.         else
  219.         { addx2+=1;
  220.             addx=addx2; addy=addy2; }
  221.         speed=25;
  222.         ownangle1+=speed*2;
  223.         ownangle2-=speed;
  224.         if (plane==1) { ownangle=ownangle1; } else { ownangle=ownangle2; }
  225.         //ownangle+=40;
  226.         x1=(sin[(((ownangle>>3))+cosadd*0       )&1023]>>4);
  227.         y1=(sin[(((ownangle>>3))+cosadd*0+cosadd)&1023]>>4);
  228.         x2=(sin[(((ownangle>>3))+cosadd*3       )&1023]>>4);
  229.         y2=(sin[(((ownangle>>3))+cosadd*3+cosadd)&1023]>>4);
  230.         x3=(sin[(((ownangle>>3))+cosadd*1       )&1023]>>4);
  231.         y3=(sin[(((ownangle>>3))+cosadd*1+cosadd)&1023]>>4);
  232.         x4=(sin[(((ownangle>>3))+cosadd*2       )&1023]>>4);
  233.         y4=(sin[(((ownangle>>3))+cosadd*2+cosadd)&1023]>>4);
  234.  
  235.         mdx1=(x2-x1)>>2; mdy1=(y2-y1)>>2;  // 3
  236.         mdx2=(x4-x3)>>2; mdy2=(y4-y3)>>2;
  237.  
  238.         mx1=(x1)*16; my1=(y1)*16; // 25
  239.         mx2=(x3)*16; my2=(y3)*16;
  240.  
  241.         _ES=(int)dbuffer;
  242.         //scale=scale-(12-(frame>>6))*25;
  243.         for (y=0;y<scry;y++) {
  244.  
  245.  
  246.         mx1+=mdx1; my1+=mdy1;
  247.         mx2+=mdx2; my2+=mdy2;
  248.  
  249.     doline:
  250.         vx=(mx1/scale+addx)*scrx; vy=(my1/scale+addy)*scrx; //320
  251.         qdx=(mx2-mx1)/scale; qdy=(my2-my1)/scale;
  252.  
  253.         _CX=scrx;
  254.  
  255.         asm push ds
  256.  
  257.         if (plane) _DS=mem1; else _DS=mem2;
  258.  
  259.         if (!iszbuffer) {
  260.  
  261.         I mov ax,vy
  262.         I mov dx,vx
  263. lineloop:
  264.  
  265.         I add ax,qdy
  266.  
  267.         I mov bl,ah
  268.  
  269.         I add dx,qdx
  270.  
  271.         I mov bh,dh
  272.  
  273.         I mov bl,ds:[bx]
  274.         //asm and bl,0f0h
  275. //        asm or bl,0fh
  276.         I mov es:[di],bl
  277.         I sub di,scrxadd
  278.         //asm dec di            new patch
  279.  
  280.         I dec cx
  281.         I jnz lineloop
  282.         //asm loop lineloop
  283.         } else {
  284.  
  285.         }
  286.  
  287.         I pop ds
  288.         }
  289. }
  290.  
  291.  
  292. void CALLING preVR(void)
  293. {
  294.     frameCount++;
  295. }
  296.  
  297. void MakePalette(void)
  298. {
  299.     int i;
  300.     inportb(0x3da);
  301.     outportb(0x3c0,0x30);
  302.     outportb(0x3c0,0x04);
  303.  
  304.     outportb(0x3c8,1);
  305.  
  306.     for(i=0;i<256;i++) {
  307.             outportb(0x3c9,((i&7)*6));
  308.             outportb(0x3c9,((i&7)*3));
  309.             outportb(0x3c9,((i&7)*1));
  310.     }
  311.     //outportb(0x3c9,63);
  312.     //outportb(0x3c9,0);
  313.     //outportb(0x3c9,0);
  314.  
  315. }
  316.  
  317. void clearscreen1(int color)
  318. {
  319.     int i,j;
  320.     for (i=0;i<80;i++)
  321.     {
  322.         for (j=0;j<50;j++) {put_char(i,j,' ');put_color(i,j,color);}
  323.         waittof();
  324.  
  325.     }
  326. }
  327. void clearscreen2()
  328. {
  329.     int i,j,frame;
  330.     for (frame=0;frame<150;frame++)
  331.     {
  332.         for (i=0;i<frame;i++)
  333.         {
  334.             for (j=49;j>0;j--)
  335.             {
  336.                 put_char(i,j,read_char(i,j-1));
  337.                 put_color(i,j,read_color(i,j-1));
  338.             }
  339.             put_char(i,0,' ');
  340.             put_color(i,j,0x10);
  341.         }
  342.         waittof();
  343.     }
  344. }
  345.  
  346.  
  347. void MakePalette2(void)
  348. {
  349.     int i;
  350.     inportb(0x3da);
  351.     outportb(0x3c0,0x30);
  352.     outportb(0x3c0,0x04);
  353.  
  354.     outportb(0x3c8,1);
  355.  
  356.     for(i=0;i<256;i++) {
  357.             outportb(0x3c9,((i&7)*0));
  358.             outportb(0x3c9,((i&7)*6));
  359.             outportb(0x3c9,((i&7)*8));
  360.     }
  361.     //outportb(0x3c9,63);
  362.     //outportb(0x3c9,0);
  363.     //outportb(0x3c9,0);
  364.  
  365. }
  366.  
  367. int mand_point(int x, int y, int x2, int y2, int maxiter, int max)
  368. {
  369.     int i;
  370.     int x1=x, y1=y, xt1,yt1;
  371.     int xt,yt;
  372.  
  373.     for (i=0;i<=maxiter;i++) // optimoi, jos on tarvetta
  374.     {
  375.         I mov ax,x1
  376.         I mov bx,ax
  377.         I imul bx
  378.         I mov xt1,dx
  379.         I sar ax,11
  380.         I sal dx,5
  381.         I add ax,dx
  382.         I mov xt,ax  // xt1=(x1*x1)>>16, xt=x1*x1>>11
  383.  
  384.         I mov ax,y1
  385.         I mov bx,ax
  386.         I imul bx
  387.         I mov yt1,dx
  388.         I sar ax,11
  389.         I sal dx,5
  390.         I add ax,dx
  391.         I mov yt,ax  // yt=y1*y1>>16 , yt=y1*y1 >> 11
  392.  
  393.         I mov ax,x1
  394.         I sar ax,5
  395.         I mov bx,y1
  396.         I sar bx,5
  397.         I mul bx
  398.         I add ax,y2
  399.         I mov y1,ax  // y1=x1>>5 * y1>>5 + y
  400.  
  401.         I mov ax,xt
  402.         I sub ax,yt
  403.         I add ax,x2
  404.         I mov x1,ax  // x1= xt - yt + x
  405.  
  406.         if ( xt1 + yt1 > max ) break;
  407.     }
  408.     return i-1;
  409. }
  410.  
  411.  
  412.  
  413. void calcmand(char _seg *addr) {
  414.         int x,c,d,precount;
  415.         for(precount=0;precount<=128;precount++) {
  416.         for(x=0;x<256;x++) {
  417.             c=(x-170)*25; //c=(x-170)*25;
  418.             d=(precount-128)*25;
  419.             //*(scroff+x+(precount*320))=
  420.             *((char _seg *)addr+precount+(x<<8)+128+32768U)=
  421.             *((char _seg *)addr+(255-precount)+((x)<<8)+128+32768U)=
  422.             (mand_point(c,d,c,d,40,0x3000))*2+1;
  423.         }
  424.         }
  425. }
  426.  
  427.  
  428. void setmode(void)
  429. {
  430.     _AX=0x3;geninterrupt(0x10);
  431.     _AH=0x12; _BL=0x30; _AL=2; geninterrupt(0x10);
  432.     _AH=0x11; _AL=2; _BL=0; geninterrupt(0x10);
  433.  
  434. //    if ( (error = tmrGetScrSync(&sync)) != OK )
  435. //        midasError(error);
  436.  
  437.  
  438.         asm {
  439.                 mov dx,3d4h
  440.                 mov al,09h
  441.                 out dx,al
  442.                 inc dx
  443.                 in al,dx
  444.                 and al,01100111b
  445.                 or  al,00000111b
  446.                 out dx,al
  447.  
  448.                 dec dx
  449.                 mov al,0ah
  450.                 out dx,al
  451.                 inc dx
  452.                 mov al,2
  453.                 out dx,al
  454.                 dec dx
  455.                 mov al,0bh
  456.                 inc dx
  457.                 in al,dx
  458.                 and al,11100000b
  459.                 or al,5
  460.                 out dx,al
  461.                  }
  462.     _setcursortype(_NOCURSOR);
  463. }
  464.  
  465. void codechars(char _seg *addr) {
  466.  
  467. unsigned int a=65535U;
  468. /*           0123456789012345*/
  469. char *table="-o$&O@#░▒▓█      ";
  470.  
  471.     while(a!=0) {
  472.         addr[a]=table[addr[a]>>3];
  473.         a--;
  474.     }
  475.         addr[a]=table[addr[a]>>3];
  476. }
  477.  
  478. void water(char _seg *dbuffer);
  479.  
  480. void setframe(unsigned char far *,int plcx, int plcy,unsigned int backcolor);
  481. void settext(char *);
  482.  
  483. extern unsigned char FRAME_PIC[];
  484. extern void credits();
  485.  
  486. void main (void)
  487. {
  488.     int i;
  489.     char _seg *scr=(char _seg *)0xb800;
  490.     mpModule *module;
  491.  
  492.     midasSetDefaults();
  493.     midasConfig();
  494.  
  495.         midasInit();
  496.  
  497. //        if ( (error = tmrSyncScr(sync, preVR, NULL, NULL)) != OK )
  498. //            midasError(error);
  499.  
  500.         module = midasLoadModule("shot.mod", &mpMOD, NULL);
  501.         midasPlayModule(module, 0);
  502.  
  503.         shade(0x3f,0,-1);
  504.         _setcursortype(_NOCURSOR);
  505.         textbackground(0);
  506.         textcolor(14);
  507.         setmode();
  508.         logo_color();
  509.  
  510.         mem1=FP_SEG(farmalloc(65535U));
  511.         assert(mem1);
  512.         mem2=FP_SEG(farmalloc(65535U));
  513.         assert(mem2);
  514.  
  515.         calcmand((char _seg *)mem1);
  516.         calcmand((char _seg *)mem2);
  517.         codechars((char _seg *)mem1);
  518.  
  519.         optimized_sin();
  520.         //printf("Setting screen mode");
  521.         //setmode();
  522.         //shade(0,0x3f,1);
  523.         delay(15000);
  524.  
  525.         poispois();
  526.         setmode();
  527.         textbackground(0x0);
  528.         textcolor(15);
  529.         clrscr();
  530.  
  531.         settext("   Single plane   "
  532.                         "    text mode     "
  533.                         "  fractal rotate  "
  534.                         "      zoomer      ");
  535.         for(i=0;i<1000 && !kbhit();i++) {
  536.         rotzoom(i,1);
  537.         //rotzoom(i,0);
  538.         setframe((unsigned char far *)MK_FP(0xb800,0),(i/8<40)?i/8-40:0-((i>500)?(i-500)/8:0),15,0x0f);
  539.  
  540.         waittof();
  541.         if ((inport(0x60)&0x7f)==1) goto cleanup;
  542.         }
  543.         while (kbhit()) getch();
  544.  
  545.         poispois();
  546.         setmode();
  547.  
  548.         settext("                  "
  549.                         "      Water       "
  550.                         "   Interference   "
  551.                         "                  "
  552.                         );
  553.         for(i=0;i<1000 && !kbhit();i++) {
  554.         water((char _seg *)0xb800);
  555.  
  556.         setframe((unsigned char far *)MK_FP(0xb800,0),100-i/8,35,0x0f);
  557.         waittof();
  558.         if ((inport(0x60)&0x7f)==1) goto cleanup;
  559.         }
  560.         while (kbhit()) getch();
  561.         clearscreen1(0x60);
  562.         MakePalette();
  563.         for(i=0;i<80*50;i++) {
  564.             scr[i*2]=176;
  565.             scr[i*2+1]=2;
  566.         }
  567.  
  568.         settext(" Dual-plane rotate"
  569.                         "   zoomer with    "
  570.                         "     fractal      "
  571.                         "     mapping      ");
  572.         for(i=0;i<1000 && !kbhit();i++) {
  573.         rotzoom(i,1);
  574.         rotzoom(i,0);
  575.         setframe((unsigned char far *)MK_FP(0xb800,0),(i/8<40)?i/8-40:0-((i>500)?(i-500)/8:0),38,0x10);
  576.         waittof();
  577.         if ((inport(0x60)&0x7f)==1) goto cleanup;
  578.         }
  579.         while (kbhit()) getch();
  580.  
  581.         clearscreen2();
  582.         MakePalette2();
  583.  
  584.         settext("  Genuine TORUS   "
  585.                         "with depth shading"
  586.                         "    and texture   "
  587.                         "      pattern     ");
  588.         for (i=0;i<980 && !kbhit();i++) {
  589.                     if ((inport(0x60)&0x7f)==1) goto cleanup;
  590.             extern unsigned char buffer[];
  591.             setframe(buffer,i/4-40,15,0x10);
  592.             rotating_torus(i);
  593.         }
  594.  
  595. cleanup:
  596.         midasStopModule(module);
  597.         midasFreeModule(module);
  598.         midasClose();
  599.         while (kbhit()) getch();
  600.         delay(100);
  601.  
  602.         setmode();
  603.         credits();
  604.  
  605. };
  606.  
  607.  
  608. #define FRAME_PIC_WIDTH 20
  609. #define FRAME_PIC_DEPTH 6
  610. #define FRAME_PIC_LENGTH 240
  611. unsigned char FRAME_PIC [] = {
  612.         '┌', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,
  613.         '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,
  614.         '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,
  615.         '─', 0x0F,  '┐', 0x0F,  '│', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  616.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  617.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  618.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  '│', 0x0F,  '│', 0x0F,  ' ', 0x0F,
  619.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  620.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  621.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  '│', 0x0F,
  622.         '│', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  623.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  624.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  625.         ' ', 0x0F,  '│', 0x0F,  '│', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  626.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  627.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,
  628.         ' ', 0x0F,  ' ', 0x0F,  ' ', 0x0F,  '│', 0x0F,  '└', 0x0F,  '─', 0x0F,
  629.         '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,
  630.         '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,
  631.         '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '─', 0x0F,  '┘', 0x0F};
  632.  
  633.  
  634. void settext(char *text) {
  635. char *frame=FRAME_PIC;
  636.     int x,y;
  637.     for(y=1;y<5;y++)
  638.         for(x=1;x<19;x++) {
  639.             frame[y*40+x*2]=*text++;
  640.         }
  641. }
  642.  
  643.  
  644. void setframe(unsigned char far *screen,int plcx, int plcy,unsigned int backcolor) {
  645. int x,y,width=20,height=6;
  646. char *frame=FRAME_PIC;
  647.     for(y=0;y<height;y++) {
  648.         for(x=0;x<width;x++,frame+=2) {
  649.             if (!((plcx+x)<0||(plcy+y)<0||(plcx+x)>79||(plcy+y)>49))
  650.             *((unsigned int far *)screen+ (plcx+x)+(plcy+y)*80)=*frame+(backcolor<<8);//(*(frame+1)<<8);
  651.         }
  652.     }
  653. }
  654.  
  655.  
  656.  
  657. //void scrollline(char *text, int areawidth, int xpos, int ypos, int curplc)
  658. //{
  659. //    char buf[180];
  660. //    buf[0]=0;
  661. //    if (curplc<0) {
  662. //        int i;
  663. //        for (i=0;i<-curplc;i++) buf[i]=' ';
  664. //        buf[i]=0;
  665. //    }
  666. //    if (curplc>strlen(text)) curplc=strlen(text);
  667. //    gotoxy(xpos,ypos);
  668. //    strncat(buf,text+((curplc>0)?curplc:0),(curplc<0)?areawidth+curplc:areawidth);
  669. //    buf[areawidth]=0;
  670. //    cputs(buf);
  671. //}
  672.  
  673. void wwaittof(int count)
  674. {
  675.     int i;
  676.     for (i=0;i<count;i++) waittof();
  677. }
  678.  
  679. void credits(void)
  680. {
  681.     lastpage();
  682.     getch();
  683.     _AX=3;
  684.     geninterrupt(0x10);
  685.     printf("Thanks for watching Paranoids ASCII demo!\n\n");
  686. }
  687.  
  688.  
  689.